Pr i18n 2c special case pages#22
Merged
Merged
Conversation
The pre-commit and pre-push scope-guards block any diff containing `Reetwerder|21029 Hamburg` (the operator's address required by §5 TMG) unless the file path matches ALLOW_RE. Locale catalog files (locale/ **/*.po, *.mo, *.pot) are mechanically extracted from the public impressum/privacy/terms templates — they cannot avoid carrying the same address strings, but the source templates are explicitly allow-listed. Without this exception, every i18n update of the legal pages would need --no-verify to commit, defeating the hook. Adding locale/.* to the allow list keeps the guard tight (other paths still blocked) while acknowledging that the catalogs only mirror already-public content. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes the i18n campaign (after 1, 2a, 2b, 1b, fix-switcher) by handling the four templates that were deliberately skipped from the mechanical PR-i18n-2a/2b wrap because of legal nuance, plus dashboard.html added per user direction "alle templates grundlegend betrachten". - enterprise.html: full EN-twin (~91 strings translated DE→EN as msgids, DE remains in catalog). EN-only disclaimer header notes the German version is legally authoritative (HGB §257, AO §147, DSGVO Art 17). - impressum.html: stays raw German per TMG §5; en-only preamble explains why the legal body below is in German. Only 2 new keys (preamble). - privacy.html: full _() wrap of ~55 strings + DE-authoritative footer. - terms.html: full _() wrap of ~25 strings + DE-authoritative footer. Adds new sections § 8 (Subscriptions) and § 9 (Right of Withdrawal, BGB §356 (5)) per the BGB-waiver feature in a follow-up commit; old §8 Contact renumbered to §10. - dashboard.html: mechanical wrap (Page-Title, headings, button labels). Catalog: 184 new msgids, all DE translations populated (400 of 400 in de.po, drift-check exit 0). Three new regression guards in tests/test_public_pages_reachability.py pin the disclaimer/preamble/raw- German invariants for /de/enterprise, /en/enterprise, /en/impressum; existing /privacy /terms params updated to /en/ since default route now serves DE. Cockpit + transactional emails are out of scope (deferred to PR-i18n-3 — needs User.preferred_lang DB migration). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Required by terms.html § 9 (added in PR-i18n-2c): German consumer law (§ 356 (5) BGB) lets a paid subscriber waive the standard 14-day right of withdrawal in exchange for immediate access to paid-tier features. Without an explicit waiver, the subscription cannot start executing inside the 14-day window — defeating the point of paying. UI gate (pricing.html + pricing.js): - Each upgrade tier exposes a `data-target`-wired waiver checkbox (`pro-waiver`, `business-waiver`). - The matching button (`pro-btn`, `business-btn`) renders with the `disabled` attribute; the JS only toggles it off after the user ticks the checkbox. Server gate (billing.py): - /api/v1/billing/checkout now requires `withdrawal_waiver=True` in the request body; we record the waiver acceptance alongside the Stripe customer creation. Rejects with 400 if missing — defence in depth so a curl bypass of the UI checkbox still can't open a contract that lacks the legal acknowledgement. Schema (schemas.py): - `CheckoutRequest` adds `withdrawal_waiver: bool` (required). Tests: - New tests/test_billing_consent.py asserts the 400 path, the audit-log line, and the happy path. - test_seo_foundation.py renames the `..._when_stripe_enabled` test to `..._with_waiver_gate_when_stripe_enabled` and pins the `disabled` + `data-target` structure. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…oc edits
Across base.html meta description, jsonld description, README compliance
row, and register.html subtitle. The new wording makes a less absolute
claim (privacy is a goal, not a guarantee) and aligns with the
positioning we want to take on AlternativeTo / Wikidata listings.
- README.md: rewords compliance-edition signing language ("CI gate
validated against veraPDF for a worst-case fixture", "cryptographically
signed releases" — matches actual mechanism rather than waving GPG
around).
- register.html: subtitle "Free forever — no credit card required" →
"Free tier forever — upgrade only when you need more" (positions the
free tier without implying paid is unnecessary).
- docs/formats.md, docs/installation.md: minor cleanup edits.
No behavioural change.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The committed pot still carried the placeholder header from the original Babel scaffold (`PROJECT` / `ORGANIZATION`), even though scripts/i18n.py runs `pybabel extract --project=FileMorph --copyright-holder=FileMorph`. A fresh extract on Linux CI produced the correct header and the drift- check failed against the stale committed copy. Re-running `python scripts/i18n.py extract` locally regenerates the pot with the right header — same content, just the metadata that should have been there since PR-i18n-1. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The previous CI run drift-checked against a stale state and reported missing msgids that exist in the committed pot at HEAD. Bumping the POT-Creation-Date forces a fresh CI run with the current branch tip. No msgid/msgstr changes — the pot already contains the strings CI flagged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
f2fb7d7 to
101288a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.